package cl.ncx.cmvrc.persistence.base.entities.solicitud;

import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import cl.ncx.cmvrc.persistence.base.entities.localizacion.Direccion;
import cl.ncx.cmvrc.persistence.base.entities.personas.Autoridad;
import cl.ncx.cmvrc.persistence.base.entities.vehiculo.FichaVehiculo;

/**
 * Solicitud entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "solicitud", schema = "base", uniqueConstraints = @UniqueConstraint(columnNames = "ficha_vehiculo"))
@SequenceGenerator(name="solicitud_seque", sequenceName="base.solicitud_solicitud_id_seq")
public class Solicitud implements java.io.Serializable {

	// Fields

	/**
	 * 
	 */
	/**private static final long serialVersionUID = 1L;**/
	
	private Integer solicitudId;
	private FichaVehiculo fichaVehiculo;
	private EstadoSolicitud estadoSolicitud;
	private Autoridad autoridad;
	private Direccion direccion;
	private String motivo;
	private Timestamp fecha;
	private String observacion;
	private Set<OrdenDeTrabajo> ordenDeTrabajos = new HashSet<OrdenDeTrabajo>(0);

	// Constructors

	/** default constructor */
	public Solicitud() {
	}

	/** minimal constructor */
	public Solicitud(Integer solicitudId, EstadoSolicitud estadoSolicitud,
			Autoridad autoridad, Direccion direccion, String motivo,
			Timestamp fecha) {
		this.solicitudId = solicitudId;
		this.estadoSolicitud = estadoSolicitud;
		this.autoridad = autoridad;
		this.direccion = direccion;
		this.motivo = motivo;
		this.fecha = fecha;
	}

	/** full constructor */
	public Solicitud(Integer solicitudId, FichaVehiculo fichaVehiculo,
			EstadoSolicitud estadoSolicitud, Autoridad autoridad,
			Direccion direccion, String motivo, Timestamp fecha,
			String observacion, Set<OrdenDeTrabajo> ordenDeTrabajos) {
		this.solicitudId = solicitudId;
		this.fichaVehiculo = fichaVehiculo;
		this.estadoSolicitud = estadoSolicitud;
		this.autoridad = autoridad;
		this.direccion = direccion;
		this.motivo = motivo;
		this.fecha = fecha;
		this.observacion = observacion;
		this.ordenDeTrabajos = ordenDeTrabajos;
	}

	// Property accessors
	@Id
	@Column(name = "solicitud_id", unique = true, nullable = false)
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "solicitud_seque")
	public Integer getSolicitudId() {
		return this.solicitudId;
	}

	public void setSolicitudId(Integer solicitudId) {
		this.solicitudId = solicitudId;
	}

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@JoinColumn(name = "ficha_vehiculo", nullable = false)
	public FichaVehiculo getFichaVehiculo() {
		return this.fichaVehiculo;
	}

	public void setFichaVehiculo(FichaVehiculo fichaVehiculo) {
		this.fichaVehiculo = fichaVehiculo;
	}

	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "estado", nullable = false)
	public EstadoSolicitud getEstadoSolicitud() {
		return this.estadoSolicitud;
	}

	public void setEstadoSolicitud(EstadoSolicitud estadoSolicitud) {
		this.estadoSolicitud = estadoSolicitud;
	}

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@JoinColumn(name = "solicitante", nullable = false)
	public Autoridad getAutoridad() {
		return this.autoridad;
	}

	public void setAutoridad(Autoridad autoridad) {
		this.autoridad = autoridad;
	}

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
	@JoinColumn(name = "direccion", nullable = false)
	public Direccion getDireccion() {
		return this.direccion;
	}

	public void setDireccion(Direccion direccion) {
		this.direccion = direccion;
	}

	@Column(name = "motivo", nullable = false)
	public String getMotivo() {
		return this.motivo;
	}

	public void setMotivo(String motivo) {
		this.motivo = motivo;
	}

	@Column(name = "fecha", nullable = false, length = 35)
	public Timestamp getFecha() {
		return this.fecha;
	}

	public void setFecha(Timestamp fecha) {
		this.fecha = fecha;
	}

	@Column(name = "observacion")
	public String getObservacion() {
		return this.observacion;
	}

	public void setObservacion(String observacion) {
		this.observacion = observacion;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "solicitud")
	public Set<OrdenDeTrabajo> getOrdenDeTrabajos() {
		return this.ordenDeTrabajos;
	}

	public void setOrdenDeTrabajos(Set<OrdenDeTrabajo> ordenDeTrabajos) {
		this.ordenDeTrabajos = ordenDeTrabajos;
	}

}